/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import Fachada.Fachada;
import LogicaNegocio.*;
import java.sql.*;
import java.util.Vector;


/**
 *
 * @author GEMA
 */
public class DAOProducto
{   Fachada fachada;

    public DAOProducto()
    {
        fachada= new Fachada();
    }

    public int guardarProducto(Producto producto)
    {
        String sql_guardar;
        sql_guardar="INSERT INTO Producto(codigo_producto, costo_fabricacion, presentacion_producto, fecha_fabricacion_producto, fecha_vencimiento_producto, aNos_garantia) VALUES" +
                "('"+ producto.getCodigoArticulo()+ "','"+ producto.getCostoFabricacion()+"','"+ producto.getPresentacion()+"','"+ producto.getFechaFabricacion()+
                "','"+producto.getFechaVencimiento()+"','"+producto.getAñosGarantia()+"')";

        try
        {
            Connection conexion= fachada.ConexionBaseDatos();
            Statement sentencia=conexion.createStatement();
            int numFilas= sentencia.executeUpdate(sql_guardar);
            conexion.close();
            return numFilas;
        }
        catch(SQLException e)
        {
            System.out.println(e);
        }
        catch(Exception e)
        { System.out.println(e);
        }
        return -1;
    }

    public int modificarCostoFabricacionProducto(Producto producto)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Producto "+
                        "SET  costo_fabricacion = '" + producto.getCostoFabricacion() + "' " +
                        "WHERE codigo_producto = '" + producto.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarPresentacionProducto(Producto producto)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Producto "+
                        "SET presentacion_producto  = '" + producto.getPresentacion()+ "' " +
                        "WHERE codigo_producto = '" + producto.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }


    public int modificarFechaFabricacionProducto(Producto producto)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Producto "+
                        "SET  fecha_fabricacion_producto = '" + producto.getFechaFabricacion()+ "' " +
                        "WHERE codigo_producto = '" + producto.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarFechaVencimientoProducto(Producto producto)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Producto "+
                        "SET fecha_vencimiento_producto  = '" + producto.getFechaVencimiento()+ "' " +
                        "WHERE codigo_producto = '" + producto.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }


    public int modificarAñosGarantiaProducto(Producto producto)
    {
        String sql_modificar;
        sql_modificar = "UPDATE Producto "+
                        "SET aNos_garantia  = '" + producto.getAñosGarantia()+ "' " +
                        "WHERE codigo_producto = '" + producto.getCodigoArticulo() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }


    public Vector<Producto> consultarProductos()
    {
        String sql_select;
        sql_select = "SELECT  codigo_articulo, nombre_articulo, precio_venta_articulo, codigo_categoria, cc_empleado, " +
                     "costo_fabricacion, presentacion_producto, fecha_fabricacion_producto,fecha_vencimiento_producto,aNos_garantia " +
                     "FROM Producto P, Articulo A " +
                     "WHERE P.codigo_producto= A.codigo_articulo";

        Vector <Producto> vecProducto = new Vector <Producto>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                Producto producto = new Producto(tabla.getString(1),tabla.getString(2), tabla.getInt(3),tabla.getString(4),tabla.getString(5),tabla.getInt(6),tabla.getString(7), tabla.getString(8), tabla.getString(9), tabla.getInt(10));
                vecProducto.addElement(producto);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return vecProducto;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }


    public int eliminarProducto(String codigoProducto)
    {
        String sql_eliminar;
        sql_eliminar = "DELETE FROM Producto "+
                        "WHERE codigo_producto = " + "'" +codigoProducto + "'";

        try
        {
            Connection conexion = fachada.ConexionBaseDatos();
            Statement sentencia = conexion.createStatement();
            int numFilas = sentencia.executeUpdate(sql_eliminar);
            conexion.close();
            return numFilas;
        }
        catch(SQLException e)
        {System.out.println(e); }
        catch(Exception e)
        {System.out.println(e); }
        return -1;
    }

    public Producto consultarproducto(String codigo) {
        String sql_seleccionar;
        sql_seleccionar = "SELECT  codigo_articulo, nombre_articulo, precio_venta_articulo, codigo_categoria, cc_empleado, " +
                     "costo_fabricacion, presentacion_producto, fecha_fabricacion_producto,fecha_vencimiento_producto,aNos_garantia " +
                     "FROM Producto P, Articulo A " +
                     "WHERE P.codigo_producto= A.codigo_articulo";

        try{
            Connection conexion= fachada.ConexionBaseDatos();
            Statement sentencia = conexion.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_seleccionar);

            Producto producto = null;

            while(tabla.next())
            {
               producto = new Producto(tabla.getString(1),tabla.getString(2), tabla.getInt(3),tabla.getString(4),tabla.getString(5),tabla.getInt(6),tabla.getString(7), tabla.getString(8), tabla.getString(9), tabla.getInt(10));
            }
            conexion.close();
            System.out.println("Conexion cerrada");
            return producto;
        }
         catch(SQLException e)
         {
             System.out.println(e);
             return null;
         }
         catch(Exception e){
             System.out.println(e);
             return null;
         }
    }

}
